# 1.编写一个方法，让它接受一个参数 n, 计算 1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n 的和？

'''
                             循环变量
1/1 ------------------------> 1
1/1 + 1/2 ------------------> 2
1/1 + 1/2 + 1/3 ------------> 3
1/1 + 1/2 + 1/3 + 1/4 ------> 4

get_sum(n=4)
result = 0
denomiator = 5 n = 4
result += 1/1 + 1/2 + 1/3 + 1/4
'''

def get_sum(n: int) -> float:
    result = 0
    denominator = 1

    while denominator <= n:
        result += 1 / denominator
        denominator += 1
    
    return result

# 2.观察当 n 接近无穷大的时候，上面的和接近多少？
print(get_sum(10))
print(get_sum(100))
print(get_sum(1000))
print(get_sum(10000))
print(get_sum(10000000))
print(get_sum(100000000))

'''

1/1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 = 前 5 项的和 + 1/6

1/1 + 1/2 + 1/3 + 1/4 + 1/5 = 前 4 项的和 + 1/5

1/1 + 1/2 + 1/3 + 1/4 = 前 3 项的和 + 1/4

1/1 + 1/2 + 1/3 = 前 2 项的和 + 1/3

1/1 + 1/2 = 前 1 项的和 + 1/2

前 1 项的和 = 1
'''
# 递归
# 递归执行的程序，它可以递归的深度是有限制的
def get_sum_recursive(n: int) -> float:
    if n == 1:
        return 1 # 递归的终止条件
    else:
        # 1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n = 前 n-1 项的和 + 1/n
        return get_sum_recursive(n-1) + 1 / n


print(f"R:{get_sum_recursive(10)}")
print(f"R:{get_sum_recursive(100)}")
# print(f"R:{get_sum_recursive(1000)}")
# print(f"R:{get_sum_recursive(10000)}")
# print(f"R:{get_sum_recursive(10000000)}")
# print(f"R:{get_sum_recursive(100000000)}")


# 提取数字
# 9876 -> [9,8,7,6]
'''
             商p   余q
9876 / 10    987   6
987  / 10    98    7
98   / 10    9     8
9    / 10    0     9
0    / 10    0     0
当商为 0 的时候，就不再计算了。
'''

def extract_digits(n: int) -> list[int]:
    result = []

    while n != 0:
        result.append(n % 10)
        n = n // 10
    
    # result [6, 7, 8, 9]
    result.reverse()

    return result

print(extract_digits(9876))